home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / text / edit / CedBar.lha / CedBar / cedbar.gc < prev    next >
Text File  |  1999-05-10  |  16KB  |  594 lines

  1. G4C
  2.  
  3. ; $VER: CedBar.gc 3.5 ( by dck - 20.8.98 )
  4. ; ----------------------------------------------------------------------
  5. ; A GUI providing a toolbar for the CygnusEd text editor.
  6. ; This is a work in perpetual progress, as I use it myself..
  7. ; CygnusEd is a commercial product from ASDG Inc. (AFAIK)
  8.  
  9. ; What we do is define various icons, which we use as if they 
  10. ; were buttons and send the appropriate rexx command to $cedport, 
  11. ; which contains the name of the current CEd's arexx port.
  12.  
  13. ; According to your monitor/resolution/font etc the Icon-buttons may 
  14. ; seem too small or too big - just redesign them to your liking.
  15.  
  16. ; =======================================================================
  17.  
  18. WINBIG -1 0 625 14 "" ; note : no title - since don't want borders
  19. WinType 000010
  20. ; winbackground pattern 3 2 ; try it..
  21. varpath 'cedbar.g/cedmark.g'
  22. UseTopaz        ; because it's a non-resizable window
  23.  
  24. ; -----------------------------------------------------------
  25. ;       on loading
  26. ; -----------------------------------------------------------
  27.  
  28. xOnLoad                       ; On Loading set the default values...
  29.  
  30.     cedname = CEd     ; << **** PUT HERE THE FULL PATH OF CED ********
  31.  
  32.     cedClip = 0
  33.     cedMark = 1
  34.     cedSend = ""
  35.     cedFile = ""
  36.     newflag = 0
  37.     Update cedbar.gc 1 $cedClip
  38.     setgad cedbar.gc 20 HIDE   ; hide listview
  39.     setgad cedbar.gc 11/12 HIDE   ; hide amiga guide & launch mode icons
  40.     barmode = NORMAL     ; or GUIDE - can add more..
  41.     GuiClose cedbar.g       ; Close the small window (if it was open)
  42.  
  43.     gosub cedbar.gc StartUpCed      ; See which ced is calling us
  44.     if $$sys.fsn[0][6] != 'Cygnus'  ; if we are called from an other screen
  45.        cedscreen = CygnusEdScreen   ; get the 1st ced's screen name
  46.        instance = $cedport[-1][1]
  47.        if $instance > 0
  48.        and $instance <= 9
  49.            appvar cedscreen $($instance + 1) 
  50.        else
  51.            appvar cedscreen 1 
  52.        endif
  53.  
  54. ;         work around... (screen name is converted to capitals & not found..)
  55. ;       guiscreen #$cedscreen front  ; force ced to front !!! doesn't work !!!
  56.         setscreen #this $cedscreen
  57.         guiopen cedbar.gc
  58.         guiscreen #this front
  59.         setscreen #this '*'
  60.  
  61.     else
  62.         GuiOpen  cedbar.gc
  63.     endif
  64.  
  65.     GuiLoad :cedbar.g    ; the small bar
  66.     GuiLoad :cedMark.g      ; the Mark Set/Go window
  67.     GuiLoad :cedclip.g      ; clipboard viewer
  68.     guiload :filereq.gc        ; the file requester
  69.  
  70.     ; see under which ced we're running..
  71.     info gui cedbar.gc
  72.     cedscreen = $$win.screen
  73.     cedport = rexx_ced
  74.     if $cedscreen[0][6] == 'Cygnus'   ; make sure it's a ced pubscreen
  75.        instance = $cedscreen[-1][1]   ; get last letter
  76.        if $instance > 1
  77.        and $instance <= 9        ; adjust port name (if needed)
  78.            appvar cedport $($instance - 1) 
  79.        endif
  80.     endif
  81.  
  82.     ; find & load the Gui4Cli extension which provides us with 
  83.     ; extra commands we can use with the CALL command
  84.     ifexists port LVFormat
  85.        call LVFormat Register         ; notify it that we want it too
  86.     else
  87.        ; look in our dir..
  88.        extract cedbar.gc guipath mypath
  89.        joinfile $mypath lvformat progname
  90.        joinfile $progname lvformat progname
  91.        ifexists file $progname
  92.           run $progname
  93.        elseifexists file guis:ext/lvformat/lvformat
  94.           run guis:ext/lvformat/lvformat
  95.        else
  96.           ezreq 'Could not find LVFormat!' OK ''
  97.        endif
  98.     endif
  99.  
  100. ; -----------------------------------------------------------
  101. ;       ending events
  102. ; -----------------------------------------------------------
  103.  
  104. xONQuit
  105.     GuiQuit cedbar.g        ; unload all the other GUIs
  106.     GuiQuit cedmark.g
  107.     guiquit cedclip.g
  108.     guiquit addlink.g
  109.     guiquit addeffect.g
  110.     guiquit addnode.g
  111.     guiquit indent.g
  112.     guiquit wrap.g
  113.     guiquit filereq.gc
  114.     ifexists port LVFormat  ; quit out handler
  115.        call LVFormat quit
  116.     endif
  117.     ifexists file t:tempnode
  118.        delete t:tempnode
  119.     endif
  120.  
  121.     xonfail
  122.        guiwindow cedbar.gc resume
  123.  
  124. ; -----------------------------------------------------------
  125. ;       Routine - Find ced
  126. ; -----------------------------------------------------------
  127.  
  128. xRoutine StartUpCed
  129.     local count
  130.     count = 1
  131.  
  132.     portname = rexx_ced
  133.  
  134.     ; look for any instance of ced
  135.     ifexists port ~rexx_ced
  136.        while $count < 10
  137.           IfExists PORT 'rexx_ced$count'
  138.              portname = 'rexx_ced$count'
  139.              return
  140.           endif
  141.           ++count
  142.        endwhile
  143.     else
  144.        return
  145.     endif
  146.  
  147.     run '$cedname'    ; not found - start it up
  148.     Wait PORT rexx_ced 30   ; wait for ced to load
  149.     if $$RETCODE > 0
  150.        ezreq "CygnusEd was not found!" EXIT ""
  151.        GuiQuit cedbar.gc
  152.        Stop
  153.     endif
  154.     Wait SCREEN CygnusEdScreen1 30     ; if Screen does not open, use WB
  155.     portname = rexx_ced
  156.  
  157. ; -----------------------------------------------------------
  158. ;       window handling events
  159. ; -----------------------------------------------------------
  160.  
  161. xOnRMB              ; rotate the last 8 buttons
  162.     ; GuiClose cedbar.gc
  163.     ; GuiOpen cedbar.g
  164.     gosub cedbar.gc guichange
  165.  
  166. XICON 2 0 :icons/wnClose   ; the Q icon
  167.     ezreq "Last chance..\nQuit ?" YES|CANCEL choice
  168.     if $choice = 1
  169.        GuiQuit cedbar.gc
  170.     endif
  171.  
  172. XICON 15 1 :icons/right    ; the > icon togle big/small windows
  173.     GuiClose cedbar.gc
  174.     GuiOpen cedbar.g
  175.  
  176. ; -----------------------------------------------------------
  177. ;       New file
  178. ; -----------------------------------------------------------
  179.  
  180. XICON 30 0 :icons/New
  181.     SendRexx $cedport "open new"
  182.  
  183. ; -----------------------------------------------------------
  184. ;       Open file
  185. ; -----------------------------------------------------------
  186. ; ----- use "filereq.gc" (if it exists in our dir - else ASL)
  187.  
  188. XICON 55 0 :icons/Open
  189.     newflag = 1     ; set flag to know that we pressed the open button
  190.     extract cedbar.gc guipath frqpath
  191.     joinfile $frqpath filereq.gc frq
  192.     joinfile $frqpath CedFav fav
  193.     ifexists file $frq
  194.         ; get the current filename so we can get it's path
  195.         sendrexx $cedport 'status filename'
  196.         filename = $$rexxret
  197.         extract filename path path
  198.         ; load & open fireq.gc
  199.         extract frq unquote frq
  200.         guiload $frq cedbar.gc LoadFile $cedbar.gc/path $fav
  201.     else
  202.         ; if no filereq.gc open normally
  203.         SendRexx $cedport "open"
  204.     endif
  205.  
  206. ; ----- the routine that will be called from filereq.gc for *every*
  207. ;       file chosen in it's listview
  208.  
  209. xroutine LoadFile filename
  210.     ; if there have been changes made or it's an existing file - open a new file
  211.     sendrexx $cedport 'status numchanges'
  212.     changes = $$rexxret
  213.     if $newflag = 0
  214.     or $changes > 0
  215.        SendRexx $cedport "open new"
  216.     endif
  217.     newflag = 0   ; set flag = all next files (multiselected) => open new view
  218.     SendRexx $cedport 'open $filename'
  219.  
  220. ; ------ add current path to the filename - store it in cedbar.gc/fn
  221.  
  222. xroutine makefile fn
  223.     local pth
  224.     extract cedbar.gc guipath pth
  225.     joinfile $pth $fn fn
  226.  
  227.  
  228. ; -----------------------------------------------------------
  229. ;       View handling icons
  230. ; -----------------------------------------------------------
  231.  
  232. XICON 80 0 :icons/Big
  233.     SendRexx $cedport "expand view"
  234.  
  235. ; -----------------------------------------------------------
  236. ;       Save as.., Save
  237. ; -----------------------------------------------------------
  238.  
  239. XICON 95 0 :icons/saveas
  240.     SendRexx $cedport "save as"
  241.  
  242. XICON 120 0 :icons/save
  243.     SendRexx $cedport "save"
  244.  
  245. ; -----------------------------------------------------------
  246. ;       Quit
  247. ; -----------------------------------------------------------
  248.  
  249. XICON 145 0 :icons/quit
  250.     ; get information
  251.     sendrexx $cedport 'status numchanges'
  252.     changes = $$rexxret
  253.     sendrexx $cedport 'status filename'
  254.     filename = $$rexxret
  255.     sendrexx $cedport 'status totalnumviews'
  256.     views = $$rexxret
  257.     if $changes > 0
  258.        ezreq '$changes changes have been made.\nQuit $filename ?\n' 'Quit|Save & Quit|CANCEL' choice
  259.        if $choice = 0
  260.           stop
  261.        elseif $choice = 2
  262.           SendRexx $cedport "save"
  263.           ; we will quit later..
  264.        endif
  265.     endif
  266.     if $views = 1   ; this is the last file - give him one more chance..
  267.        ezreq 'Really quit ?' "Quit!|CANCEL" choice
  268.        if $choice = 0
  269.           stop
  270.        endif
  271.        ; the guy just won't listen to reason..
  272.        guiclose cedbar.gc   ; close window so ced can quit
  273.        guiclose cedmark.g
  274.        guiquit cedbar.gc    ; and quit.. (after all commands have executed)
  275.     endif
  276.     SendRexx $cedport "quit"
  277.  
  278. ; -----------------------------------------------------------
  279. ;       Cut & Paste
  280. ; -----------------------------------------------------------
  281.  
  282. XICON 170 0 :icons/cut
  283.     SendRexx $cedport cut
  284.     lvuse CedClip.g 1
  285.     lvchange 'CLIPS:$cedClip'
  286.  
  287. XICON 195 0 :icons/copy
  288.     SendRexx $cedport copy
  289.     lvuse CedClip.g 1
  290.     lvchange 'CLIPS:$cedClip'
  291.  
  292. XICON 220 0 :icons/paste
  293.     SendRexx $cedport paste
  294.     lvuse CedClip.g 1
  295.     lvchange 'CLIPS:$cedClip'
  296.  
  297. ; -----------------------------------------------------------
  298. ;       Change the clipboard unit (use cedclip.g)
  299. ; -----------------------------------------------------------
  300.  
  301. XAREA 246 0 40 14 box   ; use an area gad to get button click over
  302.     guiopen cedclip.g       ; the text gad below..
  303.     
  304. TEXT 246 1 40 12 "" 10 box    ; the number of the clipboard unit
  305.     GadID 1
  306.  
  307. XICON 287 1 :icons/Up  ; the up/down icons
  308.     ++cedClip
  309.     gosub cedclip.g changeunit
  310.  
  311. XICON 287 7 :icons/Down
  312.     --cedClip
  313.     gosub cedclip.g changeunit
  314.  
  315. ; -----------------------------------------------------------
  316. ;       Undo/Redo, Find & Replace
  317. ; -----------------------------------------------------------
  318.  
  319. XICON 300 0 :icons/undo
  320.     SendRexx $cedport "undo"
  321.  
  322. XICON 315 0 :icons/redo
  323.     SendRexx $cedport "redo"
  324.  
  325. XICON 330 0 :icons/find
  326.     SendRexx $cedport "search for"
  327.  
  328. XICON 356 1 :icons/right
  329.     SendRexx $cedport "repeat search forwards"
  330.  
  331. XICON 370 0 :icons/replace
  332.     SendRexx $cedport "replace"
  333.  
  334. XICON 396 1 :icons/right
  335.     SendRexx $cedport "repeat replace"
  336.  
  337.  
  338. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  339. ;       change gui..
  340. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  341.  
  342. XICON 410 0 :icons/change
  343.     gosub cedbar.gc guichange
  344.  
  345. xroutine guichange    ; also called from xOnRMB
  346.     if $barmode = NORMAL
  347.        barmode = GUIDE
  348.        setgad cedbar.gc 10 HIDE
  349.        setgad cedbar.gc 12 HIDE
  350.        setgad cedbar.gc 11 SHOW
  351.     elseif $barmode = GUIDE
  352.        barmode = LAUNCH
  353.        setgad cedbar.gc 10/11 HIDE
  354.        setgad cedbar.gc 12 SHOW
  355.     else ; LAUNCH mode
  356.        barmode = NORMAL
  357.        setgad cedbar.gc 11/12 HIDE
  358.        setgad cedbar.gc 10 SHOW
  359.     endif
  360.     partredraw cedbar.gc 430 0 625 14
  361.  
  362.  
  363. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  364. ;    gadid 10
  365. ; ===========================================================
  366. ;    NORMAL mode
  367. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  368.  
  369. xICON 425 0 :icons/all
  370.     gadid 10
  371.     SendRexx $cedport "beg of file"
  372.     SendRexx $cedport "mark"
  373.     SendRexx $cedport "end of file"
  374.  
  375. xICON 450 0 :icons/goto
  376.     gadid 10
  377.     GuiOpen cedmark.g
  378.  
  379. xICON 475 0 :icons/clear
  380.     gadid 10
  381.     SendRexx $cedport "clear"
  382.  
  383. xICON 500 0 :icons/colmark
  384.     gadid 10
  385.     SendRexx $cedport "mark columnar"
  386.  
  387. xICON 525 0 :icons/brackets
  388.     gadid 10
  389.     SendRexx $cedport "find matching bracket"
  390.  
  391. xICON 550 0 :icons/print
  392.     gadid 10
  393.     SendRexx $cedport "print file"
  394.  
  395. xICON 575 0 :icons/empty
  396.         gadid 10
  397.  
  398. xICON 600 0 :icons/nextced
  399.     gadid 10
  400.     guiclose cedbar.gc
  401.     SendRexx $cedport "activate next ced"
  402.     if $$rexxret > "0"     ;  if there is a next ced
  403.        cedport = $$rexxret ; the new port name
  404.        SendRexx $cedport "status pubscreenname"
  405.        cedscreen = $$rexxret
  406.     endif
  407.     guiopen cedbar.gc
  408.  
  409. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  410. ;    gadid 11
  411. ; ===========================================================
  412. ;    GUIDE mode - Amiga Guide editor
  413. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  414.  
  415. ;     create a new guide
  416. ; -----------------------------------------------------------
  417.  
  418. xICON 425 0 :icons/AGNew
  419.     gadid 11
  420.     guiload :addnode.g GUIDE
  421.  
  422. ; -----------------------------------------------------------
  423. ;     split an existing guide
  424. ; -----------------------------------------------------------
  425.  
  426. xICON 450 0 :icons/AGSplit
  427.     gadid 11
  428.     guiload :splitguide.g
  429.  
  430. ; -----------------------------------------------------------
  431. ;    join nodes into a guide
  432. ; -----------------------------------------------------------
  433.  
  434. xICON 475 0 :icons/AGJoin
  435.     gadid 11
  436.     guiload :joinguide.g
  437.  
  438. ; -----------------------------------------------------------
  439. ;    create new node
  440. ; -----------------------------------------------------------
  441.  
  442. xICON 500 0 :icons/AGNode
  443.     gadid 11
  444.     guiload :addnode.g NODE
  445.  
  446. ; -----------------------------------------------------------
  447. ;    make link
  448. ; -----------------------------------------------------------
  449.  
  450. xICON 525 0 :icons/AGLink
  451.     gadid 11
  452.     guiload :addlink.g
  453.  
  454. ; -----------------------------------------------------------
  455. ;    add effect
  456. ; -----------------------------------------------------------
  457.  
  458. xICON 550 0 :icons/AGfx
  459.     gadid 11
  460.     guiload :addeffect.g
  461.  
  462. ; -----------------------------------------------------------
  463. ;    mormalize selected text (i.e. remove @{..)
  464. ; -----------------------------------------------------------
  465.  
  466. xICON 575 0 :icons/AGClear
  467.     gadid 11
  468.     ; cut the selected text into our lv
  469.     SendRexx $cedport cut
  470.     lvuse CedClip.g 1
  471.     lvchange 'CLIPS:$cedClip'
  472.     ; ask the CedHandler program to process it
  473.     call LVFormat agclean
  474.  
  475.     ; paste it back into ced
  476.     lvsave 'CLIPS:$cedClip'
  477.     SendRexx $cedport paste
  478.  
  479. ; -----------------------------------------------------------
  480. ;    view this node
  481. ; -----------------------------------------------------------
  482.  
  483. xICON 600 0 :icons/eye
  484.     gadid 11
  485.     guiwindow cedmark.g wait
  486.     ;  close previous window & file, if any
  487.     ifexists port CEDGUIDE
  488.        sendrexx CEDGUIDE QUIT
  489.     endif
  490.     ; get current file name
  491.     sendrexx $cedport 'status filename'
  492.     filename = $$rexxret
  493.     ; save file if it's been changed
  494.     sendrexx $cedport 'status numchanges'
  495.     if $$rexxret > 0
  496.        sendrexx $cedport 'save'
  497.     endif
  498.     ; load into lv, make it a node, save as tempnode & show it
  499.     lvuse cedbar.gc 20
  500.     lvchange $filename
  501.     lvgo first
  502.     if $$lv.rec[0][5] == "@data"
  503.        ; if it's a node add the @database stuff..
  504.     else
  505.        lvinsert -1 '@database Test\n@node MAIN "Main"\n'
  506.        lvadd '@endnode\n'
  507.     endif
  508.     lvsave t:tempnode
  509.     run 'amigaguide t:tempnode screen=$cedscreen port=CEDGUIDE'
  510.     guiwindow cedmark.g resume
  511.  
  512.  
  513. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  514. ;    gadid 12
  515. ; ===========================================================
  516. ;    LAUNCH mode
  517. ; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  518.  
  519. xICON 425 0 :icons/indent
  520.     gadid 12
  521.     guiload :indent.g
  522.  
  523. xICON 450 0 :icons/unindent
  524.     gadid 12
  525.     SendRexx $cedport cut
  526.     lvuse CedClip.g 1
  527.     lvchange 'CLIPS:$cedClip'
  528.     call LVFormat UnIndent
  529.     lvsave 'CLIPS:$cedClip'
  530.     SendRexx $cedport paste
  531.  
  532. xICON 475 0 :icons/wrap
  533.     gadid 12
  534.     guiload :wrap.g
  535.  
  536. xICON 500 0 :icons/empty
  537.     gadid 12
  538.     ; get selected text
  539.     SendRexx $cedport cut
  540.     lvuse CedClip.g 1
  541.     lvchange 'CLIPS:$cedClip'
  542.     txt = $$lv.rec
  543.     sendrexx $cedport "text #define $txt\tMakeID(\'$txt[0][1]\',\'$txt[1][1]\',\'$txt[2][1]\',\'$txt[3][1]\')\t\t// "
  544.  
  545. xICON 525 0 :icons/empty
  546.     gadid 12
  547.  
  548. xICON 550 0 :icons/search
  549.     gadid 12
  550.     gosub cedbar.gc getname
  551.     if $textpath < ' '
  552.        textpath = sys:
  553.     endif
  554.     ; put selected text into search for box
  555.     SendRexx $cedport copy
  556.     lvuse CedClip.g 1
  557.     lvchange 'CLIPS:$cedClip'
  558.     ; load a slightly modified version of guis:g4c/fsearch.gc
  559.     guiload :fsearch.gc '$textpath' '$$lv.rec'
  560.  
  561. xICON 575 0 :icons/calc
  562.     gadid 12
  563.     guiload :calc.gc  ; also in guis:tools
  564.  
  565. xICON 600 0 :icons/info
  566.     gadid 12
  567.     local path/guidename ; local vars
  568.     ;  close previous guide if any
  569.     ifexists port CEDGUIDE
  570.        sendrexx CEDGUIDE QUIT
  571.     endif
  572.     extract cedbar.gc guipath path
  573.     joinfile $path CedBar.guide guidename
  574.     run 'amigaguide $guidename screen=$cedscreen port=CEDGUIDE'
  575.  
  576. ; -----------------------------------------------------------
  577. ;     a hidden listview - used for file manipulation
  578. ; -----------------------------------------------------------
  579.  
  580. XLISTVIEW 0 0 87 110 '' lvr '' 0 MULTI
  581.     gadid 20
  582.  
  583.  
  584. ; -----------------------------------------------------------
  585. ;     routine to get current filename & path
  586. ; -----------------------------------------------------------
  587.  
  588. xroutine getname
  589.     sendrexx $cedport 'status filename'
  590.     filename = $$rexxret
  591.     extract filename path textpath
  592.  
  593.  
  594.